//给你两个由正整数和 0 组成的数组 nums1 和 nums2 。 
//
// 你必须将两个数组中的 所有 0 替换为 严格 正整数，并且满足两个数组中所有元素的和 相等 。 
//
// 返回 最小 相等和 ，如果无法使两数组相等，则返回 -1 。 
//
// 
//
// 示例 1： 
//
// 
//输入：nums1 = [3,2,0,1,0], nums2 = [6,5,0]
//输出：12
//解释：可以按下述方式替换数组中的 0 ：
//- 用 2 和 4 替换 nums1 中的两个 0 。得到 nums1 = [3,2,2,1,4] 。
//- 用 1 替换 nums2 中的一个 0 。得到 nums2 = [6,5,1] 。
//两个数组的元素和相等，都等于 12 。可以证明这是可以获得的最小相等和。
// 
//
// 示例 2： 
//
// 
//输入：nums1 = [2,0,2,0], nums2 = [1,4]
//输出：-1
//解释：无法使两个数组的和相等。
// 
//
// 
//
// 提示： 
//
// 
// 1 <= nums1.length, nums2.length <= 10⁵ 
// 0 <= nums1[i], nums2[i] <= 10⁶ 
// 
//
// Related Topics 贪心 数组 👍 13 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-05-10 00:45:30
 * @description 2918.数组的最小相等和
 */
public class MinimumEqualSumOfTwoArraysAfterReplacingZeros{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 MinimumEqualSumOfTwoArraysAfterReplacingZeros fun=new MinimumEqualSumOfTwoArraysAfterReplacingZeros();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public long minSum(int[] nums1, int[] nums2) {
		long count1 =0;
		long count2 =0;
		long s1=0;
		long s2=0;
		for (int i = 0; i < nums1.length; i++) {
			s1+=nums1[i];
			if (nums1[i] == 0) {
				count1++;
			}
		}
		for (int i = 0; i < nums2.length; i++) {
			s2+=nums2[i];
			if (nums2[i] == 0) {
				count2++;
			}
		}
		if(count1==0&&count2==0) {
			return s1==s2?s1:-1;
		}
		if(count1 == 0 || count2 == 0) {
			if(count1==0){
				return s1<s2+count2? -1:s1;
			}else {
				return s2<s1+count1? -1:s2;
			}
		}
		long res1=count1+s1;
		long res2=count2+s2;
		return Math.max(res1,res2);
	}
}
//leetcode submit region end(Prohibit modification and deletion)

}
